<?php

class ts_modules{

    protected $output;
    protected $modules;

    public function __construct(){
        $this->output = array();
    }

    public function register_module($module_name ,
                                    $menu_title ,
                                    $menu_position = 0 ,
                                    $window_title = ''
                                    ){
        $this->modules[$module_name] = array(
          'module_name' => $module_name ,
          'window_title' => $window_title ,
          'menu_title' => $menu_title ,
          'menu_position' => $menu_position ,
          'menu_items' => array() ,
        );
    }

    public function register_module_page($module_name ,
                                         $page_name ,
                                         $menu_title ,
                                         $window_title = ''){
        if($this->is_module($module_name)){
            $this->modules[$module_name]['menu_items'][] = array(
                                                                'window_title' => $window_title ,
                                                                'menu_title' => $menu_title ,
                                                                'page_name' => $page_name ,
                                                                );
            return true;
        }else{
            return false;
        }
    }

    public function is_module($module_name){
        return isset($this->modules[$module_name]);
    }

    public function get_modules(){
        return $this->modules;
    }

    public function get_module_menu($module_name , $echo = true){
        if(!$this->is_module($module_name)){
            return '';
        }

        $return = '<nav><a href="?module=' . $module_name . '">' . $this->modules[$module_name]['menu_title'] . '</a><ul>';

        foreach($this->modules[$module_name]['menu_items'] as $menu_item){
            $return .= '<li><a href="?module=' . $module_name . '&page=' . $menu_item['page_name'] . '">' . $menu_item['menu_title'] . '</a></li>';
        }

        $return .= '</ul></nav>';

        if($echo){
            echo $return;
        }

        return $return;
    }

    public function get_modules_menu($exclude = null , $echo = true){
        if(!$exclude){
            $exclude = array();
        }

        $return = '';

        ts_sksort($this->modules , 'menu_position' , true);

        foreach($this->modules as $module){
            if(!in_array($module['module_name'] , $exclude)){
                $return .= $this->get_module_menu($module['module_name'] , false);
            }
        }

        if($echo){
            echo $return;
        }

        return $return;
    }

}

?>